#ifndef USERAPP_H
#define USERAPP_H
#include "Type_define.h"









#define			T1SCNT				15625
#define			T1F5SCNT			23438
#define			T2SCNT				31250
#define			T2F2SCNT			38000
#define			T2F5SCNT			39062
#define			T3SCNT				46875
#define			T3F2SCNT			48000


#define		CURRENT_1A			_Q12(1)
#define		CURRENT_1_2A		_Q12(1.2)
#define		CURRENT_1_3A		_Q12(1.3)
#define		CURRENT_1_4A		_Q12(1.4)
#define		CURRENT_1_5A		_Q12(1.5)
#define		CURRENT_1_8A		_Q12(1.9)
#define		CURRENT_2A			_Q12(2.2)
#define		CURRENT_2_5A		_Q12(2.5)
#define		CURRENT_2_8A		_Q12(2.8)
#define		CURRENT_3A			_Q12(3)
#define		CURRENT_3_6A		_Q12(3.6)
#define		CURRENT_4A			_Q12(4)
#define		CURRENT_4_5A		_Q12(4.5)
#define		CURRENT_5A			_Q12(5)
#define		CURRENT_5_5A		_Q12(5.7)
#define		CURRENT_6A			_Q12(6)
#define		CURRENT_6_5A		_Q12(6.5)
#define		CURRENT_7A			_Q12(7.2)
#define		CURRENT_7_5A		_Q12(7.5)
#define		CURRENT_8A			_Q12(8)
#define		CURRENT_8_5A		_Q12(8.3)
#define		CURRENT_9A			_Q12(9)
#define		CURRENT_10A			_Q12(10)
#define		CURRENT_11A			_Q12(11)
#define		CURRENT_11_5A		_Q12(11.5)
#define		CURRENT_12A			_Q12(12)
#define		CURRENT_12_5A		_Q12(12.5)
#define		CURRENT_13A			_Q12(13)
#define		CURRENT_14A			_Q12(14)
#define		CURRENT_15A			_Q12(15)
#define		CURRENT_15_5A		_Q12(15.5)
#define		CURRENT_16A			_Q12(16)
#define		CURRENT_17A			_Q12(17.5)
#define		CURRENT_18A			_Q12(18)
#define		CURRENT_19A			_Q12(19)
#define		CURRENT_20A			_Q12(20.5)
#define		CURRENT_21A			_Q12(21.5)
#define		CURRENT_22A			_Q12(22)
#define		CURRENT_25A			_Q12(25)


#define 	CPQ_PRESS_10KG			26000//50000
#define 	CPQ_PRESS_15KG			30000//50000
#define 	CPQ_PRESS_20KG			34000//50000
#define 	CPQ_PRESS_25KG			38000//50000
#define 	CPQ_PRESS_30KG			41000//50000
#define 	CPQ_PRESS_40KG			45500//50000
#define 	CPQ_PRESS_50KG			48000//50000
#define 	CPQ_PRESS_60KG			49000//50000
#define 	CPQ_PRESS_80KG			50000//50000

#define 	CPQ_RUN_VQ				55000//58000



#define		PRESS_80KG		CURRENT_11A//45056
#define		PRESS_60KG		CURRENT_9A//32768
#define		PRESS_50KG		CURRENT_8_5A//18432
#define		PRESS_40KG		CURRENT_8A//18432
#define		PRESS_30KG		CURRENT_6A//18432
#define		PRESS_25KG		CURRENT_5A//8192
#define		PRESS_20KG		CURRENT_4A//8192
#define		PRESS_15KG		CURRENT_3A//8192
#define		PRESS_10KG		CURRENT_2A//8192


//	Foc_lib.IqFilter = Foc_lib.IqFilter + ((Foc_lib.Iq - Foc_lib.IqFilter) >> 11);
//#define		PRESS_80KG		CURRENT_12A//45056
//#define		PRESS_60KG		CURRENT_9A//32768
//#define		PRESS_40KG		CURRENT_4A//18432
//#define		PRESS_20KG		CURRENT_2A//8192

typedef enum 
{
	RUN_INIT = 0, 
	RUN_POS = 1,
	RUN_NEG = 2,
	RUN_PRESS = 3,//press coffee;
	RUN_POUR = 4,//pour coffee;
	RUN_STOP = 5,
	RUN_BREAK_TOP = 6,
	RUN_BREAK_BOTTOM = 7,
	RUN_BREAK_IDLE = 8,
	
}CPCSTATES_T;
extern volatile CPCSTATES_T CPQ_STATE;

typedef struct 
{	
	s32 MotorRunTimeCnt;
	s32 TargetRunCnt;
	s32 MotorRestCnt;
	u16 MotorRestTime; 
}APPUSER_T;


extern volatile APPUSER_T AppUser;


typedef struct 
{	
	u8 FilterCnt;
	u8 MotorEnable;
	u8 PressFlag;
	u8 PourFlag;
	u8 PressFinshFlag;
	u8 PourFinshFlag;
	s16	SpeedLowCnt;
	s32 BREAKRunCnt;
	s32 NEGRunCnt;
	s32 POSRunCnt;
	s32 HALLRunCnt;
	s32 CPQHALLACnt;
	s32 CPQHALLBCnt;
	s32 CPQHALLCCnt;
	s32 TopBlockCnt;
	s32 BottomBlockCnt;
	s32 BottomCurrentLevel;
	s32 PressCurrentLevel;
	s32 PressStableCurrent;
	s32 PressDeltaCurrent;
	s32 PourStableCurrent;
	s32 PourDeltaCurrent;
	
}CPQAPP_T;
extern volatile CPQAPP_T CPQUser;

void CPQAPPResetFun(void);
void CPQAPPInitFun(void);
void RevDirRunFun(void);
void CPQRunSTateFun(void);
void CPQDirModifyFun(void);
void AppUserInitFun(void);
void MotorRunTimeControlFun(u32 TimeVal);
void CPQRUNDirScanFun(void);	
#endif


